Математическое моделирование
Мажитов М. А.
Российский университет дружбы народов, Москва, Россия
24 февраля 2024
Изучить модели боевых действий Ланчестера. Применить их на практике для решения задания лабораторной работы.
Рассмотривается три случая ведения боевых действий:
Боевые действия между регулярными войсками
Боевые действия с участием регулярных войск и партизанских отрядов
Боевые действия между партизанскими отрядами
Между страной Х и страной У идет война. Численность состава войск исчисляется от начала войны, и являются временными функциями x(t) и y(t). В начальный момент времени страна Х имеет армию численностью 61000 человек, а в распоряжении страны У армия численностью в 45000 человек. Для упрощения модели считаем, что коэффициенты a, b, c, h постоянны. Также считаем P(t) и Q(t) непрерывными функциями.
Постройте графики изменения численности войск армии Х и армии У для следующих случаев:
$$ {dx\over {dt}} = -0.22x(t)-0.82y(t)+2sin(4t) $$ $$ {dy\over {dt}} = -0.45x(t)-0.67y(t)+2cos(4t) $$
$$ {dx\over {dt}} = -0.28x(t)-0.83y(t)+1.5sin(t) $$ $$ {dy\over {dt}} = -0.31x(t)y(t)-0.75y(t)+1.5cos(5t) $$
Рассмотрим первый случай. Численность регулярных войск определяется тремя факторами:
В этом случае модель боевых действий между регулярными войсками описывается следующим образом:
$$ {dx\over {dt}} = -a(t)x(t)-b(t)y(t)+P(t) $$ $$ {dy\over {dt}} = -c(t)x(t)-h(t)y(t)+Q(t) $$
В первом пункте нами рассматривается как раз такая модель. Она является доработанной моделью Ланчестера, так его изначальная модель учитывала лишь члены b(t)y(t) и c(t)x(t), то есть, на потери за промежуток времени влияли лишь численность армий и “эффективность оружия” (коэффициенты b(t) и c(t)).
$$ {dx\over {dt}} = -ax(t)-by(t)+P(t) $$ $$ {dy\over {dt}} = -cx(t)-hy(t)+Q(t) $$
Именно эти уравнения и будут решать наши программы для выполнения первой части задания. В конце мы получим график кривой в декартовых координатах, где по оси ox будет отображаться численность армии государства X, по оси oy будет отображаться соответствующая численность армии Y.
По тому, с какой осью пересечётся график, можно определить исход войны. Если ось ox будет пересечена в положительных значениях, победа будет на стороне армии государства X (так как при таком раскладе численность армии Y достигла нуля при положительном значении численности армии X). Аналогичная ситуация для оси oy и победы армии государства Y.
Для второй части задания, то есть, для моделирования боевых действий между регулярной армией и партизанской армией, необходимо внести поправки в предыдущую модель. Считается, что темп потерь партизан, проводящих свои операции в разных местах на некоторой известной территории, пропорционален не только численности армейских соединений, но и численности самих партизан.
$$ {dx\over {dt}} = -a(t)x(t)-b(t)y(t)+P(t) $$ $$ {dy\over {dt}} = -c(t)x(t)y(t)-h(t)y(t)+Q(t) $$
Коэффициенты a, b, c и h всё так же будут положительными десятичными числами:
$$ {dx\over {dt}} = -ax(t)-by(t)+P(t) $$ $$ {dy\over {dt}} = -cx(t)y(t)-hy(t)+Q(t) $$
Решить дифференциальное уравнение, расписанное в постановке задачи лабораторной работы, поможет библиотека DifferentialEquations. Итоговые изображения в полярных координатах будут строиться через библиотеку Plots.
Пишем программу для решения задач.
Мною были построены графики для обоих случаев. На них получилось отрисовать модель изменения численности солдат двух войск и определить какая сторона проиграет.
По итогам лабораторной работы я построил две модели на языке Julia, а также познакомился с уравнением Ланчестера.
[1] Документация по Julia: https://docs.julialang.org/en/v1/
[2] Документация по OpenModelica: https://openmodelica.org/
[3] Решение дифференциальных уравнений: https://www.wolframalpha.com/